home *** CD-ROM | disk | FTP | other *** search
Text File | 1996-03-18 | 1.8 KB | 59 lines | [TEXT/Pyth] |
- # A FormSplit lets you place its children exactly where you want them
- # (including silly places!).
- # It does no explicit geometry management except moving its children
- # when it is moved.
- # The interface to place children is as follows.
- # Before you add a child, you may specify its (left, top) position
- # relative to the FormSplit. If you don't specify a position for
- # a child, it goes right below the previous child; the first child
- # goes to (0, 0) by default.
- # NB: This places data attributes named form_* on its children.
- # XXX Yes, I know, there should be options to do all sorts of relative
- # placement, but for now this will do.
-
- from Split import Split
-
- class FormSplit(Split):
- #
- def create(self, parent):
- self.next_left = self.next_top = 0
- self.last_child = None
- return Split.create(self, parent)
- #
- def getminsize(self, m, sugg_size):
- max_width, max_height = 0, 0
- for c in self.children:
- c.form_width, c.form_height = c.getminsize(m, (0, 0))
- max_width = max(max_width, c.form_width + c.form_left)
- max_height = max(max_height, \
- c.form_height + c.form_top)
- return max_width, max_height
- #
- def getbounds(self):
- return self.bounds
- #
- def setbounds(self, bounds):
- self.bounds = bounds
- fleft, ftop = bounds[0]
- for c in self.children:
- left, top = c.form_left + fleft, c.form_top + ftop
- right, bottom = left + c.form_width, top + c.form_height
- c.setbounds(((left, top), (right, bottom)))
- #
- def placenext(self, left, top):
- self.next_left = left
- self.next_top = top
- self.last_child = None
- #
- def addchild(self, child):
- if self.last_child:
- width, height = \
- self.last_child.getminsize(self.beginmeasuring(), \
- (0, 0))
- self.next_top = self.next_top + height
- child.form_left = self.next_left
- child.form_top = self.next_top
- Split.addchild(self, child)
- self.last_child = child
- #
-